<?php
class User_login extends MY_Controller {
	
	public function __construct()
    {
    	# Al constructor le envío la clase Controlador, y el nombre de la entidad gestionada
    	parent::__construct(get_class($this), '');

    	$this->title = 'Login';
	}
	
	public function index($dataView = array())
	{
		parent::_loadViews($this->template->getHomeView(), $dataView);
	}
	
	
	private function _loadLoginForm($data = array())
	{
		parent::_loadViews($this->template->getLoginView(), $data);
	}
	
	public function validarUsuario()
	{
		$dataView = array();

		$obj_usuario = new User_usuario();
		$obj_usuario->where('nombre_usuario', $this->input->post('txt_usuario'));
		$obj_usuario->where('baja', FALSE);
		$obj_usuario->limit(1);
		$obj_usuario->get();

		$usuario_logueado = FALSE;
		if($obj_usuario->exists()) {
			$this->load->library('util_encriptar');
			$clave_ingresada = $this->input->post('txt_clave');
			$clave_encriptada = $this->util_encriptar->encrypt($clave_ingresada, $obj_usuario->clave_encriptacion);

			#Encontró un usuario con el nombre especificado. Ahora se valida la clave
			if($obj_usuario->clave === $clave_encriptada) {
				#Usuario validado, cargo sus datos en la variable de sesión
				$_SESSION['usuarioLogueado'] = TRUE;
				$_SESSION[$this->template->getProyectSessionName()] = $this->template->getProjectName();
				$_SESSION[$this->template->getIdUserSessionName()] = $obj_usuario->id;
				$obj_usuario->user_rol->get();
				$_SESSION[$this->template->getRolSessionName()] = $obj_usuario->user_rol->nombre;
				$_SESSION[$this->template->getUsernameSessionName()] = !empty($obj_usuario->nombre) ? $obj_usuario->nombre : $obj_usuario->nombre_usuario;
				
				$img_perfil = !empty($obj_usuario->foto_perfil) ? $obj_usuario->getFotoPerfilMin() : '';
				$_SESSION[$this->template->getImgSessionName()] = $img_perfil;
				
				$_SESSION[$this->template->getPermissionSessionName()] = $this->_cargarPermisos($obj_usuario->user_rol);

				$usuario_logueado = TRUE;
			}
			else $dataView['error'] = 'Clave incorrecta';
		}
		else $dataView['error'] = 'El usuario no existe o no está activo';

		if($usuario_logueado) redirect($this->template->getInitial());
		else parent::_loadViews($this->template->getHomeView(), $dataView);
	}

	private function _cargarPermisos($obj_rol)
	{
		$formularios = array();
		foreach ($obj_rol->user_permiso->get_iterated() as $perm) {
			$perm->user_formulario->get();
			$perm->user_formulario->user_menu->get();

			// Armo una clave con el orden del menú + el orden del formulario
			$ordenMenu = ($perm->user_formulario->user_menu->orden < 10 ? '0' : '') . strval($perm->user_formulario->user_menu->orden);
			$ordenForm = ($perm->user_formulario->orden < 10 ? '0' : '') . strval($perm->user_formulario->orden);
			$orden = $ordenMenu . $ordenForm;
			
			$datosForm = array($perm->user_formulario->user_menu->nombre, $perm->user_formulario->user_menu->icono, $perm->user_formulario->opcion, $perm->user_formulario->controlador_funcion);
			$formularios[$orden] = $datosForm;
		}

		// Ordeno el vector creado según las claves para asegurarme que se cumpla el orden que se desea
		ksort($formularios);
		return $formularios;
	}
	
	public function logout()
    {
		session_unset();
        session_destroy();
        $this->index();
    }
}